package com.sc.nft.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.DigitalCollectionProductInfo;
import com.sc.nft.entity.ProductStock;
import com.sc.nft.entity.dto.*;
import com.sc.nft.entity.vo.*;
import com.sc.nft.enums.ClassifyType;
import com.sc.nft.enums.CommodityType;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * 服务接口
 *
 * @author Sun
 * @since 2022-05-30 13:42:06
import java.util.HashMap;
import java.util.List;

/**
 * 服务接口
 *
 * @author rdg
 * @since 2022-05-30 15:19:18
 * @description 由 Mybatisplus Code Generator 创建
 */
public interface DigitalCollectionProductInfoService {
    //查看所有盲盒
    List<HashMap> findAllBlindBox(int isIosShow);
    //查看盲盒系列
    List<ALLCatenaVO> findBlindBoxCatena(int isIosShow);
    //首页藏品推荐
    List<HomePageDigitalCollectionProductVO> getTop10DigitalCollection(int isIosShow);

    /**
     * 添加商品
     * @param productInfo
     */
    void addProduct(DigitalCollectionProductInfo productInfo, ProductStock productStock);
    /**
     * 后台商品列表
     *
     */
    Page<PageProductVO> pageProduct(String firstTitle, String productUuid, Boolean status, Boolean isSoldOut, Integer commodityType, Integer classifyType, int pageNo, int pageSize);

    //后台修改商品状态
    void updateProductStatus(Long id,  Boolean status,Boolean isEnable);

    /**
     * 根据id修改排序
     * @param id
     */
    void updateConcernedNumRequest(Long id, Long concernedNum);

    /**
     * 根据id更新库存
     * @param id
     */
    void updateStock(Long id, Boolean isAdd, Integer number);

    /**
     * 根据id一键售罄
     * @param id
     */
    void soldOut(Long id);
    /**
     * 可添加的邀请任务奖励商品列表
     * */
    List<DigitalCollectionProductInfo> inviteTaskProductList();
    //空投可发放的商品

    /**
     * @d
     * @param firstTitle
     * @param productUuid
     * @param typeClassify
     * @return
     */
    Page<AirdropGrantproductVO> airdropGrantProduct(Page page,String firstTitle, String productUuid, Integer typeClassify,Integer commodityType);

    /**
    * 根据藏品id查询是否有正在上架中的商品
     * @param collectionId
     */
    List<DigitalCollectionProductInfo> getByCollectionId(Long collectionId);

    /**
     * 生成JDK
     * @param productId
     */
    void generateCDK(Long productId);

    /**
     * 导出CDK列表
     * @param productId
     * @return
     */
    List<ProductCdkVO> getCdkList(Long productId);
    /**
     * 分页CDK
     * @param productId
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<ProductCdkVO> getPageCdkList(Long productId, int pageNo, int pageSize);

    /**
     * @description: 商品开启,(购买,兑换合成)
     * @author: rdg
     * @date: 2022/9/5 10:24
     * @param:
     * @return:
     */
    void autoOpenProductBegin(DigitalCollectionProductInfo digitalCollectionProductInfo);

    /**
     * @description: 商品开启,(购买,兑换合成)
     * @author: rdg
     * @date: 2022/9/5 10:24
     * @param:
     * @return:
     */
    void closeProductEnd();

    /**
     * 按类型获取商品列表
     * @param commodityType
     * @param pageNo
     * @param pageSize
     * @return
     */
    Page<AssociateProductListByCommodityTypeVO> getAssociateProductListByCommodityType(CommodityType commodityType, Integer pageNo, Integer pageSize, String firstTitle, ClassifyType typeClassify);

    Page<AssociateProductListByCommodityTypeVO> getAllAssociateProductListByCommodityType(CommodityType commodityType, Integer pageNo, Integer pageSize, String firstTitle, ClassifyType typeClassify);

    /**
     * 获取芯片商品
     * @param pageNo
     * @param pageSize
     * @param firstTitle
     * @return
     */
    Page<AssociateProductListByCommodityTypeVO> getAssociateChipProductList(Integer pageNo, Integer pageSize, String firstTitle);


    /**
     * 获取申购商品
     * @param request
     */
    void addSubscribeProduct(AddSubscribeProductDTO request);
    /**
     * 查看申购商品详情
     * @param id
     * @return
     */
    SubscribeProductAdminVO getSubscribeProductById(Long id);
    /**
     * 修改商品
     * @param request
     */
    void modificationSubscribeProduct(ModificationSubscribeProductDTO request);


    /**
     * 新增竞拍商品
     * @param request
     */
    void addAuctionProduct(AddAuctionProductDTO request);

    /**
     * 修改竞拍商品
     * @param request
     */
    void modifyAuctionProduct(ModifyAuctionProductDTO request);


    /**
     * 查看竞拍商品详情
     * @param id
     * @return
     */
    AuctionProductAdminVO getAuctionProductById(Long id);

}
